import java.util.*;

public class project {

    public int findTheLongestSubstring(String s) {
        int len=s.length();
        int[] arr=new int[1<<5];
        Arrays.fill(arr,-1);
        int ans=0;
        int target=0;
        arr[0]=0;
        for(int i=0;i<len;i++){
            char ch=s.charAt(i);
            if(ch=='a'){
                target^=1<<0;
            }else if(ch=='e'){
                target^=1<<1;
            }else if(ch=='i'){
                target^=1<<2;
            }else if(ch=='o'){
                target^=1<<3;
            }else if(ch=='u'){
                target^=1<<4;
            }
            if(arr[target]>=0){
                ans=Math.max(ans,i+1-arr[target]);
            }else{
                arr[target]=i+1;
            }
        }
        return ans;
    }














    public boolean queryString(String s, int n) {
        for(int i=0;i<n;i++){
            int index=i;
            StringBuilder sb=new StringBuilder();
            while (index!=0){
                if(index%2==0){
                    sb.append('0');
                }else{
                    sb.append('1');
                }
                index/=2;
            }
            if(!s.contains(sb.reverse())){
                return false;
            }
        }
        return true;
    }























    public int getKth(int lo, int hi, int k) {
        List<Integer> list=new ArrayList<>();
        for(int i=lo;i<=hi;i++){
            list.add(i);
        }
        Collections.sort(list, new Comparator<Integer>() {
            @Override
            public int compare(Integer o1, Integer o2) {
                if(dfs(o1)!=dfs(o2)){
                    return dfs(o1)-dfs(o2);
                }else{
                    return o1-o2;
                }
            }
        });
        return list.get(k-1);
    }
    public int dfs(int n){
        if(n==1){
            return 0;
        }else if(n%2==0){
            return dfs(n/2)+1;
        }else{
            return dfs(n*3+1)+1;
        }
    }

















    public int[] getMaximumXor(int[] nums, int maximumBit) {
        int len=nums.length;
        int target=(1<<maximumBit)-1;
        int[] arr=new int[len];
        int[] prev=new int[len+1];
        for(int i=0;i<len;i++){
            prev[i+1]=prev[i]^nums[i];
        }
        for(int i=0;i<len;i++){
            arr[i]=target-prev[len-i];
        }
        return arr;
    }





















//    public interface NestedInteger {
//        public NestedInteger();
//        public NestedInteger(int value);
//             // @return true if this NestedInteger holds a single integer, rather than a nested list.
//             public boolean isInteger();
//             // @return the single integer that this NestedInteger holds, if it holds a single integer
//             // Return null if this NestedInteger holds a nested list
//             public Integer getInteger();
//             // Set this NestedInteger to hold a single integer.
//             public void setInteger(int value);
//             // Set this NestedInteger to hold a nested list and adds a nested integer to it.
//             public void add(NestedInteger ni);
//             // @return the nested list that this NestedInteger holds, if it holds a nested list
//             // Return empty list if this NestedInteger holds a single integer
//             public List<NestedInteger> getList();
//    }
//    public NestedInteger deserialize(String s) {
//        Deque<NestedInteger> deque=new ArrayDeque<NestedInteger>();
//        if(s.charAt(0)!='['){
//            return new NestedInteger(Integer.parseInt(s));
//        }
//        int num=0;
//        boolean flag=false;
//        for(int i=0;i<s.length();i++){
//            char ch=s.charAt(i);
//            if(ch=='-'){
//                flag=true;
//            }else if(Character.isDigit(ch)){
//                num=num*10+ch-'0';
//            }else if(ch=='['){
//                deque.add(new NestedInteger());
//            }else if(ch==','||ch==']'){
//                if(Character.isDigit(s.charAt(i-1))){
//                    if(flag){
//                        num*=-1;
//                    }
//                    deque.peek().add(new NestedInteger(num));
//                }
//                num=0;
//                flag=false;
//                if(ch==']'&&deque.size()>1){
//                    NestedInteger tmp=deque.poll();
//                    deque.peek().add(tmp);
//                }
//            }
//        }
//        return deque.pop();
//    }
}
